﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;


using Modelo_ETdA.Negocio.AmbienteComercial;
using Modelo_ETdA.Negocio.Analista;

namespace Modelo_ETdA.Interface
{
    public partial class VerAmbComercial : Form
    {
        public MenuAnaliseETdA menuAnaliseEtda;
        private GestorAmbienteComercial gestorAmb;
        private SortedDictionary<String, int> listaAnalistas;
        private AmbienteComercial ambCom;
        private GestorAnalista gestorAna;


        public VerAmbComercial(MenuAnaliseETdA ant, GestorAmbienteComercial gestor, AmbienteComercial ambCom, GestorAnalista gAnalista)
        {
            InitializeComponent();
            menuAnaliseEtda = ant;
            this.ambCom = ambCom;
            gestorAmb = gestor;

            codigo.Text = "" + ambCom.Cabeçalho.Cod;
            nome.Text = ambCom.Cabeçalho.Nome;
            morada.Text = ambCom.Cabeçalho.Morada;
            email.Text = ambCom.Cabeçalho.Email;
            labelCategoria.Text = ambCom.Categoria.nome;

            gestorAna = gAnalista;
            this.listaAnalistas = gestorAna.getMapUsernamesCodAnalista();
            insereAnalistas();
        }

        public void insereAnalistas()
        {
            lanalistas.Items.Clear();
            foreach (KeyValuePair<String, int> par in listaAnalistas)
            {
                if (par.Value != gestorAna.AnalistaLogado.cod)
                {
                    lanalistas.Items.Add(par.Value + " " + par.Key);
                }
            }
            for (int i = 0; i < lanalistas.Items.Count; i++)
            {
                if (ambCom.listCodAnalistas.Contains(procuraCodAnalista(lanalistas.Items[i].ToString())))
                {
                    lanalistas.SetItemChecked(i, true);
                }
            }
        }

        public int procuraCodAnalista(String s)
        {
            foreach (KeyValuePair<String, int> par in listaAnalistas)
            {
                if (s.Equals(par.Value + " " + par.Key)) return par.Value;
            }
            return -1;
        }

        private void voltar_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            menuAnaliseEtda.Visible = true;
        }

        private void seguinte_Click(object sender, EventArgs e)
        {
            try{
            if (nome.TextLength > 0 && morada.TextLength > 0 && email.TextLength > 0)
            {
                AmbienteComercialCabecalho cabecalho = new AmbienteComercialCabecalho(ambCom.Cabeçalho.Cod, nome.Text, morada.Text, email.Text);

                List<int> analistasAmb = new List<int>();
                for (int i = 0; i < lanalistas.CheckedItems.Count; i++)
                {
                    int codAnal = procuraCodAnalista(lanalistas.CheckedItems[i].ToString());
                    if (!ambCom.listCodAnalistas.Contains(codAnal))
                    {
                        ambCom.listCodAnalistas.Add(codAnal);
                        analistasAmb.Add(codAnal);
                    }
                }
                this.Visible = false;
                AmbienteComercial amb = new AmbienteComercial(analistasAmb, null, false, null, cabecalho);
                gestorAmb.editaAmbComercial(amb);
                Form next = new VerAmbComercial2(this, menuAnaliseEtda, ambCom, gestorAmb);
                next.Visible = true;
            }
            else MessageBox.Show("Não preencheu todos os campos!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao consultar ambiente comercial.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

    }
}
